package com.yu.yuaigeneralcode.service;

import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.service.IService;
import com.yu.yuaigeneralcode.model.dto.app.AppAddRequest;
import com.yu.yuaigeneralcode.model.dto.app.AppQueryRequest;
import com.yu.yuaigeneralcode.model.entity.App;
import com.yu.yuaigeneralcode.model.entity.User;
import com.yu.yuaigeneralcode.model.vo.AppVO;
import reactor.core.publisher.Flux;

import java.util.List;

/**
 * 应用 服务层。
 *
 * @author <a href="https://gitee.com/ma-xinyu-1">马新雨</a>
 */
public interface AppService extends IService<App> {
    /**
     * 获取应用封装类
     * @param app 应用
     * */
    AppVO getAppVO(App app);

    /**
     * 获取应用列表封装类
     * @param appList 应用列表
     * */
    List<AppVO> getAppVOList(List<App> appList);

    /**
     * 构造应用查询条件
     * @param appQueryRequest 应用查询条件
     * */
    QueryWrapper getQueryWrapper(AppQueryRequest appQueryRequest);

    /**
     * 创建 应用
     * @param appAddRequest 应用创建请求
     * @param loginUser 登录用户
     * */
    Long createApp(AppAddRequest appAddRequest, User loginUser);

    /**
    *  通过聊天生成代码
    *  @param appId 应用id
    *  @param message 用户输入的提示词
     * @param loginUser 登录用户
    * */
    Flux<String> chatToGenCode(Long appId, String message, User loginUser);

    /**
    * 应用部署
    * @param appId 应用id
    * @param loginUser 登录用户
    * @return 部署可访问的地址
    * */
    String deployApp(Long appId, User loginUser);

    /**
     * 异步生成应用截图并更新应用封面
     * @param appId 应用ID
     * @param appUrl 应用访问URL
     * */
    void generateAppScreenshotAsync(Long appId, String appUrl);
}
